package manyText;

import java.util.Scanner;

public class equals1 {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "abc";
        String s3 = "Abc";
//        以上字符串类型变量的值相等是，是公用一个地址的，所以s1==s2为ture，当其中一个变量的值发生改变时
//        ，即s1和s2的值不在相同时，新的数据会存储在堆中开辟的地方,二者地址值不同s1==s2为false
        String s4 = new String("abc");
        String s5 = new String("abc");
        String s6 = new String("Abc");
//        以上，new出来的对象都会存储在堆中重新开辟的空间中，地址均不同，及时两者的数据值相同，用==判断都是false

//        在字符串中“==”符号比较两者的地址值，s1,s2,s3,s4,s5,s6存储的是数据值的地址值
        System.out.println(s1==s2);//两者地址值一致
        System.out.println(s1==s3);//两者地址值不一致
        System.out.println(s1==s4);
        System.out.println(s4==s5);
//        equals:只比较两者的数据值，数据值相等即为ture,但要求两者的字符完全相同
        System.out.println(s1.equals(s4));
        System.out.println(s4.equals(s5));
        System.out.println(s4.equals(s6));
//        equalsIgnoreCase:只比较两者的数据值，数据值相等即为ture,不分字母的大小
        System.out.println(s4.equalsIgnoreCase(s6));
        System.out.println(s3.equalsIgnoreCase(s4));

//        拓展
        //Ctrl+alt+v,可以快捷生成左侧的对应的数据类型和变量名
        boolean equals = s4.equals(s6);
        System.out.println(equals);

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串：");
        String b1 = sc.next();//输入"abc":小知识，input输入的，也是new出来的
        String b2 ="abc";
        String b3 ="abc";

        System.out.println(b1==b2);//false
        System.out.println(b2==b3);//ture
        System.out.println(b1.equals(b2));//ture
        System.out.println(b1.equalsIgnoreCase(b2));//ture
//        由上可知，Scanner方法输入的值也是new出来的，与直接赋值的的地址值不一样

        System.out.println(b1.charAt(0));
        System.out.println(b1.charAt(1));
        System.out.println(b1.charAt(2));
//       charAt():该方法可按照索引获取字符串的每一个字符，索引从0开始

        System.out.println(b1.length());//获取该字符串的长度
    }
}
